//
// Created by yanhai on 2021/5/2.
//

#include <iostream>
#include <thread>

void func()
{
    std::cout << "thread start" << std::endl;
    // ...
    std::cout << "thread finish" << std::endl;
}

int main(int argc, char **argv)
{
    // thread标准库里的类
    //1. 创建线程，并指定入口函数为func，并启动线程
    std::thread t(func);

    //2. 等待t线程运行结束
    // 一个好的程序：在主线程退出时，先让所有子线程退出。
    t.join();

    std::cout << "Hello World!" << std::endl;

    // 3.将线程t与主线程分离，主线程不在等待子线程t
    // 分离后，子线程驻留在后台，由C++运行时库接管
    // detach后，不能再用join，会有异常
//    t.detach();

    // 4.判断线程t是否可以join或者detach
    if (t.joinable()) {
        std::cout << "可以调用join或者detach" << std::endl;
    } else {
        std::cout << "不可以调用join或者detach" << std::endl;
    }
    return 0;
}
